home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d6 / lbl421.arc / LABELER.PAS < prev    next >
Pascal/Delphi Source File  |  1990-07-05  |  50KB  |  1,458 lines

  1. {                                                                             }
  2. {                                                                             }
  3. {    Program     LABELER                                                      }
  4. {                                                                             }
  5. {    Author      Ken Buetow             CIS [71001,613]                       }
  6. {                Guardian Soƒtware                                            }
  7. {                26 Rose Street                                               }
  8. {                Baltic, Ct  06330-1028                                       }
  9. {                                                                             }
  10. {    Phone       (203) 822-9212 [Voice]                                       }
  11. {                                                                             }
  12. {    Date        February 1, 1986       Last revised  July 5, 1990            }
  13. {                                                                             }
  14. {    Language    TURBO Pascal version 5                                       }
  15. {                                                                             }
  16. {    Remarks                                                                  }
  17. {                                                                             }
  18. {                Utility to print disk labels on standard size                }
  19. {                one-up labels.                                               }
  20. {                                                                             }
  21. {                Portions (c) Borland International                           }
  22.  
  23. {$V-}
  24. {$S+}    {Stack checking on}
  25. {$I+}    {I/O checking on}
  26. {$N-}    {No numeric coprocessor}
  27.  
  28. program labeler;
  29.  
  30.  
  31. Uses
  32.   Crt,
  33.   Dos;
  34.  
  35. const
  36.   version   = '4.21';
  37.   double    = '═══════════════════════════════════════════════════════════════════════════════';
  38.   single    = '───────────────────────────────────────────────────────────────────────────────';
  39.   long      = '----------------------------------------------------------------';
  40.   max_files = 4096;
  41.   init_str     :string = ^N^R^T^['F'^['H'^['T'^['9'^['2';
  42.   line_spacing :string = #27'3'#18;
  43.   sub_on       :string = #27'S'#0;
  44.   sub_off      :string = #27'T';
  45.   emp_on       :string = #27'E';
  46.   emp_off      :string = #27'F';
  47.   dbl_on       :string = #14;
  48.   dbl_off      :string = #20;
  49.   cond_on      :string = #15;
  50.   cond_off     :string = #18;
  51.   dbl_st_on    :string = #27'G';
  52.   dbl_st_off   :string = #27'H';
  53.  
  54.   type_over : boolean = true;
  55.   registered: boolean = false;
  56.   labels = 10;
  57.  
  58. type
  59.   str_10 = string[10];
  60.   str_12 = string[13];
  61.   str_45 = string[65];
  62.   cmt_ptr= ^str_45;
  63.   fs_ptr = ^str_12;
  64.  
  65. var
  66.   test:integer;
  67.   lst,
  68.   cnf_file  :text;
  69.   key       :char;
  70.   reg       :registers;
  71.   max_drive,
  72.   drive,
  73.   curr_dr   :byte;
  74.   d_size,
  75.   used,
  76.   free      :LongInt;
  77.   copies,
  78.   i,j,k,x,y,
  79.   count,
  80.   start,
  81.   printer,
  82.   num_files :integer;
  83.   temp_str,
  84.   disk_name,
  85.   library,
  86.   line,
  87.   mask_fs   :string[255];
  88.   mask_file :text;
  89.   temp,
  90.   spaces,
  91.   blank_fs  :str_12;
  92.   blank_cmt :str_45;
  93.   temp_fs   :fs_ptr;
  94.   temp_cmt  :cmt_ptr;
  95.   filespec  :array[1..max_files] of record
  96.                                       name:fs_ptr;
  97.                                       cmt:cmt_ptr
  98.                                     end;
  99.   cont,
  100.   again,
  101.   abort,
  102.   blank     :boolean;
  103.   s_rec     :SearchRec;
  104.   size,
  105.   sizes     :byte;
  106.   tcols     :integer;
  107.   label_size:array[0..labels] of string;
  108.   wrap      :array[0..labels] of boolean;
  109.   cols      :array[0..labels] of integer;
  110.   rows      :array[0..labels] of integer;
  111.   filler    :array[0..labels] of integer;
  112.   feeds     :array[0..labels] of integer;
  113.   dbl       :array[0..labels] of boolean;
  114.   width     :array[0..labels] of integer;
  115.   path      :string;
  116.  
  117.  
  118. function value(s:string):integer;
  119. var i,c:integer;
  120. begin
  121.   val(s,i,c);
  122.   value := i
  123. end;
  124.  
  125. function parse(s:string):string;
  126. var st:string;
  127. begin
  128.   st := '';
  129.   while s[1] in ['0'..'9'] do
  130.     begin
  131.       st := st + chr(value(copy(s,1,pos(' ',s)-1)));
  132.       s := copy(s,pos(' ',s)+1,255)
  133.     end;
  134.   parse := st
  135. end;
  136.  
  137.  
  138. function Flop(c:char):string;
  139. begin
  140.   case ord(c) of
  141.       0: flop := #27#76#9#0#0#0#0#0#0#0#0#0#0;
  142.       1: flop := #27#76#9#0#60#66#149#177#177#149#66#60#0;
  143.       2: flop := #27#76#9#0#60#126#235#207#207#235#126#60#0;
  144.       3: flop := #27#76#9#0#0#14#31#62#124#62#31#14#0;
  145.       4: flop := #27#76#9#0#0#8#28#62#127#62#28#8#0;
  146.       5: flop := #27#76#9#0#28#28#74#127#127#74#28#28#0;
  147.       6: flop := #27#76#9#0#8#28#94#127#127#94#28#8#0;
  148.       7: flop := #27#76#9#0#0#0#60#60#60#60#0#0#0;
  149.       8: flop := #27#76#9#0#255#255#195#195#195#195#255#255#0;
  150.       9: flop := #27#76#9#0#0#126#66#66#66#66#126#0#0;
  151.      10: flop := #27#76#9#0#255#129#189#189#189#189#129#255#0;
  152.      11: flop := #27#76#9#0#15#7#127#249#136#136#248#112#0;
  153.      12: flop := #27#76#9#0#0#0#78#95#241#241#95#78#0;
  154.      13: flop := #27#76#9#0#7#7#5#5#127#254#224#192#0;
  155.      14: flop := #27#76#9#0#63#127#101#5#5#127#254#192#0;
  156.      15: flop := #27#76#9#0#219#219#60#231#231#60#219#219#0;
  157.      16: flop := #27#76#9#0#0#8#8#28#62#62#127#127#0;
  158.      17: flop := #27#76#9#0#0#127#127#62#62#28#8#8#0;
  159.      18: flop := #27#76#9#0#0#0#36#102#255#255#102#36#0;
  160.      19: flop := #27#76#9#0#0#0#95#95#0#95#95#0#0;
  161.      20: flop := #27#76#9#0#127#127#1#127#127#17#31#14#0;
  162.      21: flop := #27#76#9#0#0#88#253#165#165#191#26#0#0;
  163.      22: flop := #27#76#9#0#0#112#112#112#112#112#112#112#0;
  164.      23: flop := #27#76#9#0#0#148#182#255#255#182#148#0#0;
  165.      24: flop := #27#76#9#0#0#0#4#6#127#127#6#4#0;
  166.      25: flop := #27#76#9#0#0#0#16#48#127#127#48#16#0;
  167.      26: flop := #27#76#9#0#0#8#28#62#8#8#8#8#0;
  168.      27: flop := #27#76#9#0#0#8#8#8#8#62#28#8#0;
  169.      28: flop := #27#76#9#0#0#16#16#16#16#16#28#28#0;
  170.      29: flop := #27#76#9#0#8#28#42#8#8#42#28#8#0;
  171.      30: flop := #27#76#9#0#0#48#56#60#62#60#56#48#0;
  172.      31: flop := #27#76#9#0#0#6#14#30#62#30#14#6#0;
  173.      32: flop := #27#76#9#0#0#0#0#0#0#0#0#0#0;
  174.      33: flop := #27#76#9#0#0#0#0#95#95#0#0#0#0;
  175.      34: flop := #27#76#9#0#0#0#7#7#0#0#7#7#0;
  176.      35: flop := #27#76#9#0#0#21#63#126#85#63#126#84#0;
  177.      36: flop := #27#76#9#0#0#18#58#43#107#106#46#36#0;
  178.      37: flop := #27#76#9#0#0#99#102#12#24#48#99#67#0;
  179.      38: flop := #27#76#9#0#0#80#114#55#93#79#122#48#0;
  180.      39: flop := #27#76#9#0#0#0#0#0#3#7#4#0#0;
  181.      40: flop := #27#76#9#0#0#0#65#99#62#28#0#0#0;
  182.      41: flop := #27#76#9#0#0#0#28#62#99#65#0#0#0;
  183.      42: flop := #27#76#9#0#0#8#42#62#28#62#42#8#0;
  184.      43: flop := #27#76#9#0#0#8#8#62#62#8#8#0#0;
  185.      44: flop := #27#76#9#0#0#0#0#96#224#128#0#0#0;
  186.      45: flop := #27#76#9#0#0#8#8#8#8#8#8#0#0;
  187.      46: flop := #27#76#9#0#0#0#0#96#96#0#0#0#0;
  188.      47: flop := #27#76#9#0#0#3#6#12#24#48#96#64#0;
  189.      48: flop := #27#76#9#0#0#62#127#71#77#89#127#62#0;
  190.      49: flop := #27#76#9#0#0#64#64#127#127#66#64#0#0;
  191.      50: flop := #27#76#9#0#0#102#111#73#89#81#115#98#0;
  192.      51: flop := #27#76#9#0#0#54#127#73#73#65#99#34#0;
  193.      52: flop := #27#76#9#0#0#16#127#127#19#22#28#24#0;
  194.      53: flop := #27#76#9#0#0#57#125#69#69#69#103#39#0;
  195.      54: flop := #27#76#9#0#0#48#121#73#73#75#126#60#0;
  196.      55: flop := #27#76#9#0#0#3#7#13#121#113#3#3#0;
  197.      56: flop := #27#76#9#0#0#54#127#73#73#73#127#54#0;
  198.      57: flop := #27#76#9#0#0#30#63#105#73#73#79#6#0;
  199.      58: flop := #27#76#9#0#0#0#0#102#102#0#0#0#0;
  200.      59: flop := #27#76#9#0#0#0#0#102#230#128#0#0#0;
  201.      60: flop := #27#76#9#0#0#0#65#99#54#28#8#0#0;
  202.      61: flop := #27#76#9#0#0#36#36#36#36#36#36#0#0;
  203.      62: flop := #27#76#9#0#0#8#28#54#99#65#0#0#0;
  204.      63: flop := #27#76#9#0#0#6#15#89#81#3#2#0#0;
  205.      64: flop := #27#76#9#0#0#30#95#93#93#65#127#62#0;
  206.      65: flop := #27#76#9#0#0#124#126#19#17#19#126#124#0;
  207.      66: flop := #27#76#9#0#0#54#127#107#73#127#127#65#0;
  208.      67: flop := #27#76#9#0#0#99#65#65#65#99#62#28#0;
  209.      68: flop := #27#76#9#0#0#62#62#99#65#127#127#65#0;
  210.      69: flop := #27#76#9#0#0#99#65#73#73#127#127#65#0;
  211.      70: flop := #27#76#9#0#0#3#1#9#73#127#127#65#0;
  212.      71: flop := #27#76#9#0#0#115#113#81#65#99#62#28#0;
  213.      72: flop := #27#76#9#0#0#127#127#8#8#8#127#127#0;
  214.      73: flop := #27#76#9#0#0#0#65#127#127#65#0#0#0;
  215.      74: flop := #27#76#9#0#0#1#63#127#65#64#96#32#0;
  216.      75: flop := #27#76#9#0#0#67#103#60#24#127#127#65#0;
  217.      76: flop := #27#76#9#0#0#96#96#64#65#127#127#65#0;
  218.      77: flop := #27#76#9#0#0#127#127#6#12#6#127#127#0;
  219.      78: flop := #27#76#9#0#0#127#127#56#4#127#127#0#0;
  220.      79: flop := #27#76#9#0#0#62#127#65#65#65#127#62#0;
  221.      80: flop := #27#76#9#0#0#6#15#9#9#127#127#65#0;
  222.      81: flop := #27#76#9#0#0#94#127#49#57#33#63#30#0;
  223.      82: flop := #27#76#9#0#0#70#111#57#25#127#127#65#0;
  224.      83: flop := #27#76#9#0#0#50#115#89#73#77#103#38#0;
  225.      84: flop := #27#76#9#0#0#3#65#127#127#65#3#0#0;
  226.      85: flop := #27#76#9#0#0#63#127#64#64#127#63#0#0;
  227.      86: flop := #27#76#9#0#0#31#63#96#96#63#31#0#0;
  228.      87: flop := #27#76#9#0#0#127#127#48#56#48#127#127#0;
  229.      88: flop := #27#76#9#0#0#97#115#30#12#30#115#97#0;
  230.      89: flop := #27#76#9#0#0#7#79#120#120#79#7#0#0;
  231.      90: flop := #27#76#9#0#0#97#99#71#77#89#115#99#0;
  232.      91: flop := #27#76#9#0#0#0#65#65#127#127#0#0#0;
  233.      92: flop := #27#76#9#0#0#64#96#48#24#12#6#3#0;
  234.      93: flop := #27#76#9#0#0#0#127#127#65#65#0#0#0;
  235.      94: flop := #27#76#9#0#0#4#6#3#3#6#4#0#0;
  236.      95: flop := #27#76#9#0#128#128#128#128#128#128#128#128#0;
  237.      96: flop := #27#76#9#0#0#0#4#7#3#0#0#0#0;
  238.      97: flop := #27#76#9#0#0#64#120#60#84#84#112#32#0;
  239.      98: flop := #27#76#9#0#0#48#120#72#72#63#127#64#0;
  240.      99: flop := #27#76#9#0#0#0#108#68#68#68#124#56#0;
  241.     100: flop := #27#76#9#0#0#64#127#63#72#72#120#48#0;
  242.     101: flop := #27#76#9#0#0#0#88#92#84#84#124#56#0;
  243.     102: flop := #27#76#9#0#0#0#2#11#9#127#126#72#0;
  244.     103: flop := #27#76#9#0#0#4#252#248#164#164#188#24#0;
  245.     104: flop := #27#76#9#0#0#112#120#8#8#127#127#1#0;
  246.     105: flop := #27#76#9#0#0#0#0#64#125#125#4#0#0;
  247.     106: flop := #27#76#9#0#0#0#125#253#132#128#224#96#0;
  248.     107: flop := #27#76#9#0#0#68#108#56#16#127#127#1#0;
  249.     108: flop := #27#76#9#0#0#0#0#64#127#127#1#0#0;
  250.     109: flop := #27#76#9#0#0#120#124#12#24#8#124#124#0;
  251.     110: flop := #27#76#9#0#0#120#124#4#4#120#124#4#0;
  252.     111: flop := #27#76#9#0#0#56#124#68#68#124#56#0#0;
  253.     112: flop := #27#76#9#0#0#24#60#36#36#248#252#132#0;
  254.     113: flop := #27#76#9#0#0#132#252#248#36#36#60#24#0;
  255.     114: flop := #27#76#9#0#0#8#12#4#12#120#124#4#0;
  256.     115: flop := #27#76#9#0#0#0#32#116#84#84#92#8#0;
  257.     116: flop := #27#76#9#0#0#0#32#68#127#62#4#0#0;
  258.     117: flop := #27#76#9#0#0#64#124#60#64#64#124#124#0;
  259.     118: flop := #27#76#9#0#0#28#60#96#96#60#28#0#0;
  260.     119: flop := #27#76#9#0#0#60#124#96#48#96#124#60#0;
  261.     120: flop := #27#76#9#0#0#0#68#108#56#56#108#68#0;
  262.     121: flop := #27#76#9#0#0#0#252#252#160#160#188#28#0;
  263.     122: flop := #27#76#9#0#0#0#68#76#92#116#100#68#0;
  264.     123: flop := #27#76#9#0#0#65#65#119#62#8#8#0#0;
  265.     124: flop := #27#76#9#0#0#0#0#0#119#119#0#0#0;
  266.     125: flop := #27#76#9#0#0#8#8#62#119#65#65#0#0;
  267.     126: flop := #27#76#9#0#0#2#6#4#6#2#6#4#0;
  268.     127: flop := #27#76#9#0#0#120#124#70#67#70#124#120#0;
  269.     128: flop := #27#76#9#0#0#0#74#251#177#145#159#14#0;
  270.     129: flop := #27#76#9#0#0#64#122#122#64#64#122#58#0;
  271.     130: flop := #27#76#9#0#0#0#25#93#85#84#124#56#0;
  272.     131: flop := #27#76#9#0#66#123#125#85#85#117#35#2#0;
  273.     132: flop := #27#76#9#0#0#64#121#125#84#84#117#33#0;
  274.     133: flop := #27#76#9#0#0#64#120#124#84#85#117#33#0;
  275.     134: flop := #27#76#9#0#0#64#120#124#87#87#116#32#0;
  276.     135: flop := #27#76#9#0#0#0#64#228#164#164#60#24#0;
  277.     136: flop := #27#76#9#0#2#27#93#85#85#125#59#2#0;
  278.     137: flop := #27#76#9#0#0#0#25#93#84#84#125#57#0;
  279.     138: flop := #27#76#9#0#0#0#24#92#84#85#125#57#0;
  280.     139: flop := #27#76#9#0#0#0#1#65#124#124#69#1#0;
  281.     140: flop := #27#76#9#0#0#2#67#125#125#69#3#2#0;
  282.     141: flop := #27#76#9#0#0#0#0#64#124#125#69#1#0;
  283.     142: flop := #27#76#9#0#0#121#125#22#18#22#125#121#0;
  284.     143: flop := #27#76#9#0#0#0#112#120#43#43#120#112#0;
  285.     144: flop := #27#76#9#0#0#0#69#85#85#124#124#68#0;
  286.     145: flop := #27#76#9#0#84#84#124#124#84#84#116#32#0;
  287.     146: flop := #27#76#9#0#0#73#127#127#9#11#126#124#0;
  288.     147: flop := #27#76#9#0#0#0#50#123#73#73#123#50#0;
  289.     148: flop := #27#76#9#0#0#0#50#122#72#72#122#50#0;
  290.     149: flop := #27#76#9#0#0#0#48#120#72#74#122#50#0;
  291.     150: flop := #27#76#9#0#0#64#122#123#65#65#123#58#0;
  292.     151: flop := #27#76#9#0#0#64#120#120#64#66#122#58#0;
  293.     152: flop := #27#76#9#0#0#0#122#250#160#160#186#154#0;
  294.     153: flop := #27#76#9#0#1#25#60#102#102#60#25#1#0;
  295.     154: flop := #27#76#9#0#0#0#61#125#64#64#125#61#0;
  296.     155: flop := #27#76#9#0#0#36#36#231#231#36#60#24#0;
  297.     156: flop := #27#76#9#0#0#32#102#67#73#127#126#104#0;
  298.     157: flop := #27#76#9#0#0#0#43#47#252#252#47#43#0;
  299.     158: flop := #27#76#9#0#160#248#246#47#9#9#255#255#0;
  300.     159: flop := #27#76#9#0#2#3#9#127#254#136#192#64#0;
  301.     160: flop := #27#76#9#0#0#64#121#125#85#84#116#32#0;
  302.     161: flop := #27#76#9#0#0#0#0#65#125#125#68#0#0;
  303.     162: flop := #27#76#9#0#0#0#50#122#74#72#120#48#0;
  304.     163: flop := #27#76#9#0#0#64#122#122#66#64#120#56#0;
  305.     164: flop := #27#76#9#0#0#0#112#122#10#10#122#122#0;
  306.     165: flop := #27#76#9#0#0#0#125#125#49#25#125#125#0;
  307.     166: flop := #27#76#9#0#0#40#47#47#41#47#38#0#0;
  308.     167: flop := #27#76#9#0#0#0#38#47#41#47#38#0#0;
  309.     168: flop := #27#76#9#0#0#0#32#96#69#77#120#48#0;
  310.     169: flop := #27#76#9#0#0#0#8#8#8#8#56#56#0;
  311.     170: flop := #27#76#9#0#0#0#56#56#8#8#8#8#0;
  312.     171: flop := #27#76#9#0#145#187#238#204#24#48#111#79#0;
  313.     172: flop := #27#76#9#0#249#251#118#108#24#48#111#79#0;
  314.     173: flop := #27#76#9#0#0#0#0#123#123#0#0#0#0;
  315.     174: flop := #27#76#9#0#34#54#28#8#34#54#28#8#0;
  316.     175: flop := #27#76#9#0#8#28#54#34#8#28#54#34#0;
  317.     176: flop := #27#76#9#0#0#85#0#170#0#85#0#170#0;
  318.     177: flop := #27#76#9#0#85#170#85#170#85#170#85#170#0;
  319.     178: flop := #27#76#9#0#119#255#170#221#119#170#255#221#0;
  320.     179: flop := #27#76#9#0#0#0#0#255#255#0#0#0#0;
  321.     180: flop := #27#76#9#0#0#0#0#255#255#16#16#16#0;
  322.     181: flop := #27#76#9#0#0#0#0#255#255#20#20#20#0;
  323.     182: flop := #27#76#9#0#0#255#255#0#255#255#16#16#0;
  324.     183: flop := #27#76#9#0#0#240#240#16#240#240#16#16#0;
  325.     184: flop := #27#76#9#0#0#0#0#252#252#20#20#20#0;
  326.     185: flop := #27#76#9#0#0#255#255#0#247#247#20#20#0;
  327.     186: flop := #27#76#9#0#0#255#255#0#255#255#0#0#0;
  328.     187: flop := #27#76#9#0#0#252#252#4#244#244#20#20#0;
  329.     188: flop := #27#76#9#0#0#31#31#16#23#23#20#20#0;
  330.     189: flop := #27#76#9#0#0#31#31#16#31#31#16#16#0;
  331.     190: flop := #27#76#9#0#0#0#0#31#31#20#20#20#0;
  332.     191: flop := #27#76#9#0#0#0#0#240#240#16#16#16#0;
  333.     192: flop := #27#76#9#0#16#16#16#31#31#0#0#0#0;
  334.     193: flop := #27#76#9#0#16#16#16#31#31#16#16#16#0;
  335.     194: flop := #27#76#9#0#16#16#16#240#240#16#16#16#0;
  336.     195: flop := #27#76#9#0#16#16#16#255#255#0#0#0#0;
  337.     196: flop := #27#76#9#0#16#16#16#16#16#16#16#16#0;
  338.     197: flop := #27#76#9#0#16#16#16#255#255#16#16#16#0;
  339.     198: flop := #27#76#9#0#20#20#20#255#255#0#0#0#0;
  340.     199: flop := #27#76#9#0#16#255#255#0#255#255#0#0#0;
  341.     200: flop := #27#76#9#0#20#23#23#16#31#31#0#0#0;
  342.     201: flop := #27#76#9#0#20#244#244#4#252#252#0#0#0;
  343.     202: flop := #27#76#9#0#20#23#23#16#23#23#20#20#0;
  344.     203: flop := #27#76#9#0#20#244#244#4#244#244#20#20#0;
  345.     204: flop := #27#76#9#0#20#247#247#0#255#255#0#0#0;
  346.     205: flop := #27#76#9#0#20#20#20#20#20#20#20#20#0;
  347.     206: flop := #27#76#9#0#20#247#247#0#247#247#20#20#0;
  348.     207: flop := #27#76#9#0#20#20#20#23#23#20#20#20#0;
  349.     208: flop := #27#76#9#0#16#31#31#16#31#31#16#16#0;
  350.     209: flop := #27#76#9#0#20#20#20#244#244#20#20#20#0;
  351.     210: flop := #27#76#9#0#16#240#240#16#240#240#16#16#0;
  352.     211: flop := #27#76#9#0#16#31#31#16#31#31#0#0#0;
  353.     212: flop := #27#76#9#0#20#20#20#31#31#0#0#0#0;
  354.     213: flop := #27#76#9#0#20#20#20#252#252#0#0#0#0;
  355.     214: flop := #27#76#9#0#16#240#240#16#240#240#0#0#0;
  356.     215: flop := #27#76#9#0#16#255#255#16#255#255#16#16#0;
  357.     216: flop := #27#76#9#0#20#20#20#255#255#20#20#20#0;
  358.     217: flop := #27#76#9#0#0#0#0#31#31#16#16#16#0;
  359.     218: flop := #27#76#9#0#16#16#16#240#240#0#0#0#0;
  360.     219: flop := #27#76#9#0#255#255#255#255#255#255#255#255#0;
  361.     220: flop := #27#76#9#0#240#240#240#240#240#240#240#240#0;
  362.     221: flop := #27#76#9#0#0#0#0#0#255#255#255#255#0;
  363.     222: flop := #27#76#9#0#255#255#255#255#0#0#0#0#0;
  364.     223: flop := #27#76#9#0#15#15#15#15#15#15#15#15#0;
  365.     224: flop := #27#76#9#0#0#68#108#56#108#68#124#56#0;
  366.     225: flop := #27#76#9#0#0#0#20#62#42#42#254#252#0;
  367.     226: flop := #27#76#9#0#0#0#6#6#2#2#126#126#0;
  368.     227: flop := #27#76#9#0#0#2#126#126#2#126#126#2#0;
  369.     228: flop := #27#76#9#0#0#0#99#99#73#93#119#99#0;
  370.     229: flop := #27#76#9#0#0#4#4#60#124#68#124#56#0;
  371.     230: flop := #27#76#9#0#0#30#62#32#32#126#254#128#0;
  372.     231: flop := #27#76#9#0#0#2#6#124#126#2#6#4#0;
  373.     232: flop := #27#76#9#0#0#0#153#189#231#231#189#153#0;
  374.     233: flop := #27#76#9#0#0#28#62#107#73#107#62#28#0;
  375.     234: flop := #27#76#9#0#0#76#126#115#1#115#126#76#0;
  376.     235: flop := #27#76#9#0#0#0#57#125#79#74#120#48#0;
  377.     236: flop := #27#76#9#0#24#60#36#60#60#36#60#24#0;
  378.     237: flop := #27#76#9#0#24#61#39#62#60#100#252#152#0;
  379.     238: flop := #27#76#9#0#0#0#0#73#73#107#62#28#0;
  380.     239: flop := #27#76#9#0#0#0#126#127#1#1#127#126#0;
  381.     240: flop := #27#76#9#0#0#0#42#42#42#42#42#42#0;
  382.     241: flop := #27#76#9#0#0#0#68#68#95#95#68#68#0;
  383.     242: flop := #27#76#9#0#0#0#64#68#78#91#81#64#0;
  384.     243: flop := #27#76#9#0#0#0#64#81#91#78#68#64#0;
  385.     244: flop := #27#76#9#0#6#7#1#255#254#0#0#0#0;
  386.     245: flop := #27#76#9#0#0#0#0#127#255#128#224#96#0;
  387.     246: flop := #27#76#9#0#0#0#8#8#107#107#8#8#0;
  388.     247: flop := #27#76#9#0#0#18#54#36#54#18#54#36#0;
  389.     248: flop := #27#76#9#0#0#0#6#15#9#15#6#0#0;
  390.     249: flop := #27#76#9#0#0#0#0#24#24#0#0#0#0;
  391.     250: flop := #27#76#9#0#0#0#0#16#16#0#0#0#0;
  392.     251: flop := #27#76#9#0#1#1#255#255#192#112#48#16#0;
  393.     252: flop := #27#76#9#0#0#0#30#31#1#31#31#0#0;
  394.     253: flop := #27#76#9#0#0#0#0#18#23#29#25#0#0;
  395.     254: flop := #27#76#9#0#0#0#60#60#60#60#0#0#0;
  396.     255: flop := #27#76#9#0#0#0#0#0#0#0#0#0#0
  397.   end
  398. end;
  399.  
  400. procedure edit(var s:string; l:integer);
  401. const fill = '·';
  402. var
  403.   p,x,y:integer;
  404.   c:char;
  405.   done:boolean;
  406.  
  407.   procedure cursor(cursor_type:char);
  408.   begin
  409.     reg.ah := 1;
  410.     reg.cl := 7;
  411.     case cursor_type of
  412.       '_': reg.ch := 6;
  413.       '■': reg.ch := 1
  414.     end;
  415.     Intr($10,reg)
  416.   end;
  417.  
  418.   function ConstStr(c:char; n:integer):string;
  419.   var
  420.     i:integer;
  421.     s:string;
  422.   begin
  423.     s := '';
  424.     for i := 1 to n do s := s + c;
  425.     ConstStr := s
  426.   end;
  427.  
  428. begin
  429.   done := false;
  430.   x := whereX;
  431.   y := whereY;
  432.   write(s,ConstStr(fill,l-length(s)));
  433.   p := 0;
  434.   repeat
  435.     gotoXY(x+p,y);
  436.     if type_over then
  437.       cursor('_')
  438.     else
  439.       cursor('■');
  440.     c := readkey;
  441.     case c of
  442.       #0 : begin
  443.              c := readkey;
  444.              case c of
  445.                #71: p := 0;
  446.                #79: p := length(s);
  447.                #75: if p > 0 then p := p - 1;
  448.                #77: if p < length(s) then p := p + 1;
  449.                #83: if p < length(s) then
  450.                       begin
  451.                         delete(s,p+1,1);
  452.                         write(copy(s,p+1,l),fill)
  453.                       end;
  454.                #82: type_over := not type_over;
  455.                #72: done := true;
  456.                #80: done := true;
  457.              end
  458.            end;
  459.       ^H : if p > 0 then
  460.              begin
  461.                delete(s,p,1);
  462.                Write(^H,copy(s,p,l),fill);
  463.                p := p - 1
  464.              end;
  465.       ^Y : begin
  466.              p := 0;
  467.              s := '';
  468.              gotoxy(x,y);
  469.              write(constStr(fill,l))
  470.            end;
  471.       ^M,#27 : begin
  472.                  p := length(s);
  473.                  gotoxy(x+p,y);
  474.                  write('':l-p);
  475.                  done := true
  476.                end;
  477.       #32..#255: if p < l then
  478.                    begin
  479.                      p := p + 1;
  480.                      if type_over then
  481.                        delete(s,p,1);
  482.                      insert(c,s,p);
  483.                      write(copy(s,p,l-p+1))
  484.                    end
  485.     else
  486.       write(^G)
  487.     end
  488.   until done;
  489.  
  490.   cursor('_');
  491.   key := c;
  492.   s := copy(s,1,l)
  493. end;
  494.  
  495.  
  496. function lpt_ready:boolean;
  497. begin
  498.   reg.ah := 2;
  499.   reg.dx := printer - 1;
  500.   intr($17,reg);
  501.   lpt_ready := (reg.ah and $90) = $90;
  502. end;
  503.  
  504. function exist(fs:string):boolean;
  505. var b:boolean;
  506. begin
  507.   assign(mask_file,fs);
  508.   {$I-}
  509.   reset(mask_file);
  510.   {$I+}
  511.   b := IOResult = 0;
  512.   if b then
  513.     close(mask_file);
  514.   exist := b
  515. end;
  516.  
  517. function date:str_10;
  518. var day,month,year:str_10;
  519. begin
  520.   reg.ah := $2a;
  521.   MsDos(reg);
  522.   str(reg.dl,day);
  523.   str(reg.dh,month);
  524.   str(reg.cx-1900,year);
  525.   if length(day) = 1 then day := '0' + day;
  526.   if length(month) = 1 then month := '0' + month;
  527.   if length(year) = 1 then year := '0' + year;
  528.   date := month + '/' + day + '/' + year
  529. end;
  530.  
  531. procedure SetPrinter;
  532. begin
  533.  
  534.   {$I-}
  535.   close(lst);           { Don't care if it's not presently open }
  536.   System.InOutRes := 0; { Pretend it worked }
  537.   {$I+}
  538.  
  539.   case printer of
  540.     1: assign(lst,'lpt1');
  541.     2: assign(lst,'lpt2');
  542.     3: assign(lst,'lpt3');
  543.   end;
  544.  
  545.   append(lst);
  546.   gotoxy(x + 30,y + 6);
  547.   write(printer)
  548.  
  549. end;
  550.  
  551. procedure SetSize;
  552. begin
  553.   gotoxy(x+30,y+9);
  554.   clreol;
  555.   write(label_Size[size]);
  556.   if wrap[size] then
  557.     write(' Wrap');
  558.   disk_name := copy(disk_name,1,width[size]);
  559.   gotoxy(x+30,y+5);
  560.   clreol;
  561.   write(disk_name);
  562. end;
  563.  
  564. procedure clear_array;
  565. begin
  566.   for i := 1 to max_files do
  567.     if not (filespec[i].name = @blank_fs) then
  568.       begin
  569.         dispose(filespec[i].name);
  570.         filespec[i].name := @blank_fs
  571.       end;
  572.   for i := 1 to max_files do
  573.     if not (filespec[i].cmt = @blank_cmt) then
  574.       begin
  575.         dispose(filespec[i].cmt);
  576.         filespec[i].cmt := @blank_cmt
  577.       end;
  578.   count := 0;
  579. end;
  580.  
  581. procedure Display_choices;
  582. begin
  583.   for i := 5 to 22 do begin gotoXY(1,i); clreol end;
  584.   x := 20; y := 8;
  585.   gotoxy(x,y);      writeln('B - Blank label        ');
  586.   gotoxy(x,y + 1);  writeln('C - Continuation Labels');
  587.   gotoxy(x,y + 2);  writeln('D - Disk drive selected');
  588.   gotoxy(x,y + 3);  writeln('L - Library of         ');
  589.   gotoxy(x,y + 4);  writeln('M - Mask File Loaded   ');
  590.   gotoxy(x,y + 5);  writeln('N - Name for disk/label');
  591.   gotoxy(x,y + 6);  writeln('O - Output Printer Port');
  592.   gotoxy(x,y + 7);  writeln('P - Print label        ');
  593.   gotoxy(x,y + 8);  writeln('R - Registration Form  ');
  594.   gotoxy(x,y + 9);  writeln('S - Size of label      ');
  595.   gotoxy(x,y + 10); writeln('W - Write Configuration');
  596.   gotoxy(x,y + 12); writeln('Q - Quit               ');
  597.   SetSize;
  598.   SetPrinter;
  599.   gotoxy(x+30,y+5); write(disk_name);
  600.   gotoxy(x+30,y+4); if mask_fs[1] <> '.' then write(mask_fs);
  601.   gotoxy(x+30,y+3); write(library);
  602.   gotoxy(x+30,y+2); write(chr(drive + 65),':');
  603.   gotoxy(x+30,y+1); if cont then write('Yes') else write('No ');
  604.   gotoxy(1,24)
  605. end;
  606.  
  607. procedure init_welcome;
  608. begin
  609.   test := 0;
  610.   copies := 0;
  611.   clrscr;
  612.   TextColor(White);
  613.   LowVideo;
  614.   blank_fs := '            ';
  615.   blank_cmt:= '                                             ';
  616.   for i := 1 to max_files do filespec[i].name := @blank_fs;
  617.   for i := 1 to max_files do filespec[i].cmt := @blank_cmt;
  618.   clear_array;
  619.  
  620.   spaces := '            ';
  621.  
  622.   cont    := false;
  623.   drive   := 0;
  624.   library := '';
  625.   printer := 1;
  626.   size    := 4;
  627.   Disk_Name := '';
  628.  
  629.  
  630.   reg.ah := $19;
  631.   MsDos(Reg);
  632.   reg.ah := $0e;
  633.   reg.dl := reg.al;
  634.   MsDos(Reg);
  635.   max_Drive := reg.al;
  636.  
  637.   mask_fs := '';
  638.   clrscr;
  639.   gotoXY(1,2); write(double);
  640.   gotoXY(1,4); write(double);
  641.   gotoXY(1,23); write(single);
  642.   gotoXY(1,25); write(single);
  643.   gotoXY(1,1); write('Labeler');
  644.   gotoXY(72,1); write(date);
  645.   gotoXY(1,3);  write('Disk Label Generator          Version ',version);
  646.   gotoXY(51,3); write('(c) Guardian Soƒtware 1986,89');
  647.   gotoXY(1,6);
  648.   writeln('                Copyright    Ken Buetow');
  649.   writeln('                             Guardian Soƒtware');
  650.   writeln('                             PO Box 39');
  651.   writeln('                             St. Clair Shores, MI  48080-0039');
  652.   writeln;
  653.   writeln('         LABELER is distributed as shareware.  As such, you are given');
  654.   writeln('         30 days to evaluate LABELER, after which you must register to');
  655.   writeln('         continue using it.');
  656.   writeln;
  657.   writeln;
  658.   writeln('         You are free to copy and share Labeler with others on these ');
  659.   writeln('         conditions:');
  660.   writeln;
  661.   writeln('           1. This program is not distributed in modified form.     ');
  662.   writeln('           2. No fee or consideration is paid for Labeler itself.   ');
  663.   writeln('           3. This notice is not bypassed or removed.               ');
  664.   writeln('           4. Commercial Distrribution must have prior permission.  ');
  665.   gotoXY(1,24);
  666.  
  667.  
  668.   { get dir of labeler }
  669.  
  670.  
  671.  
  672.   GetDir(0,temp_str);
  673.  
  674.   temp_str := temp_str + ';';
  675.  
  676.   path := GetEnv('path');
  677.  
  678.   if path <> '' then
  679.     temp_str := temp_str + path;
  680.  
  681.   repeat
  682.     if temp_str = '' then
  683.       begin
  684.         clrscr;
  685.         write('Unable to locate LABELER.EXE',#13,#10,#10);
  686.         halt(1);
  687.       end;
  688.     path := copy(temp_str,1,pos(';',temp_str)-1);
  689.     if path[length(path)] <> '\' then
  690.       path := path + '\labeler.'
  691.     else
  692.       path := path + 'labeler.';
  693.     delete(temp_str,1,pos(';',temp_str));
  694.   until exist(path + 'exe');
  695.  
  696.  
  697.   { read lbl file }
  698.  
  699.   {$I-}
  700.   assign(cnf_file,path + 'lbl');
  701.   reset(cnf_file);
  702.   sizes := 0;
  703.   gotoxy(1,24); clreol; write('Reading .LBL file');
  704.   while not eof(cnf_file) do
  705.     begin
  706.       readln(cnf_file,temp_str);
  707.       if length(temp_str) <> 37 then
  708.         system.InOutRes := 1;
  709.       label_size[sizes] := copy(temp_str,1,17);
  710.       wrap[sizes] := Upcase(temp_str[18]) = 'Y';
  711.       val(copy(temp_str,20,2),cols[sizes],i);
  712.       val(copy(temp_str,23,2),rows[sizes],i);
  713.       val(copy(temp_str,26,2),filler[sizes],i);
  714.       val(copy(temp_str,29,2),feeds[sizes],i);
  715.       dbl[sizes] := UpCase(temp_str[33]) = 'Y';
  716.       val(copy(temp_str,36,2),width[sizes],i);
  717.       sizes := sizes + 1;
  718.     end;
  719.   close(cnf_file);
  720.   gotoxy(1,24);
  721.   clreol;
  722.   {$I+}
  723.  
  724.   if 0 <> IOResult then
  725.     begin
  726.       write('Problem reading LABELER.LBL',#13,#10,#10);
  727.       halt(1);
  728.     end;
  729.  
  730.   { read drv file }
  731.  
  732.   if exist(path + 'drv') then
  733.     begin
  734.       gotoxy(1,24); clreol; write('Reading .DRV file');
  735.       {$I-}
  736.       assign(cnf_file,path + 'drv');
  737.       reset(cnf_file);
  738.       readln(cnf_file,temp_str);
  739.       init_str := parse(temp_str);
  740.       readln(cnf_file,temp_str);
  741.       line_spacing := parse(temp_str);
  742.       readln(cnf_file,temp_str);
  743.       sub_on := parse(temp_str);
  744.       readln(cnf_file,temp_str);
  745.       sub_off := parse(temp_str);
  746.       readln(cnf_file,temp_str);
  747.       emp_on := parse(temp_str);
  748.       readln(cnf_file,temp_str);
  749.       emp_off := parse(temp_str);
  750.       readln(cnf_file,temp_str);
  751.       dbl_on := parse(temp_str);
  752.       readln(cnf_file,temp_str);
  753.       dbl_off := parse(temp_str);
  754.       readln(cnf_file,temp_str);
  755.       cond_on := parse(temp_str);
  756.       readln(cnf_file,temp_str);
  757.       cond_off := parse(temp_str);
  758.       readln(cnf_file,temp_str);
  759.       dbl_st_on := parse(temp_str);
  760.       readln(cnf_file,temp_str);
  761.       dbl_st_off := parse(temp_str);
  762.       close(cnf_file);
  763.       gotoxy(1,24); clreol
  764.     end;
  765.     {$I+}
  766.  
  767.   if 0 <> IOResult then
  768.     begin
  769.       write('Problem reading ' + path + 'drv',#13,#10,#10); delay(2000);
  770.       halt(1);
  771.     end;
  772.  
  773.  
  774.  
  775.   { read cfg file }
  776.  
  777.   if exist(path + 'cfg') then
  778.     begin
  779.       {$I-}
  780.       assign(cnf_file,path + 'cfg');
  781.       reset(cnf_file);
  782.       gotoxy(1,24); clreol; write('Reading .CFG file');
  783.       readln(cnf_file,temp);
  784.       readln(cnf_file,drive);
  785.       readln(cnf_file,library);
  786.       readln(cnf_file,printer);
  787.       readln(cnf_file,size);
  788.       close(cnf_file);
  789.       gotoxy(1,24);
  790.       clreol;
  791.       if temp = 'FALSE' then
  792.         cont := false
  793.       else
  794.         cont := true;
  795.       {$I+}
  796.       if 0 <> IOResult then
  797.         begin
  798.           gotoxy(1,24);
  799.           clreol;
  800.           write('Problem reading ' + path + 'cfg' + ' ... Press any key to continue.');
  801.           while not keypressed do;
  802.           key := readkey
  803.         end
  804.     end;
  805.  
  806.   disk_name := '';
  807.   copies :=0;
  808.  
  809.   { Comamnd Line Parameters }
  810.   i := 1;
  811.   while i <= paramcount do
  812.     begin
  813.       if copy(paramstr(i),1,1) <> '/' then
  814.         begin
  815.           clrscr;
  816.           writeln('Error in parameter');
  817.           writeln('usage:   LABELER [/D=d] [/L=l] [/S=s] [/M=m] [/N=n] [/O=o] [/P=p]');
  818.           writeln('Example: labeler /d=b /l=Guardian Soƒtware /s=1 /m=labeler /n=Ken Buetow /o=2 /p=10');
  819.           halt
  820.         end
  821.       else
  822.         begin
  823.           temp_str := copy(paramstr(i),2,255);
  824.           case upcase(temp_str[1]) of
  825.             'D': drive := ord(UpCase(temp_str[3])) - 65;
  826.             'S': size := ord(temp_str[3]) - 48;
  827.             'L': begin
  828.                    library := copy(temp_str,3,255);
  829.                    while (copy(paramstr(i+1),1,1) <> '/') and (i < paramcount) do
  830.                      begin
  831.                        i := i + 1;
  832.                        library := library + ' ' + paramstr(i)
  833.                      end
  834.                  end;
  835.             'M': mask_fs := copy(temp_str,3,255);
  836.             'N': begin
  837.                    disk_name := copy(temp_str,3,255);
  838.                    while (copy(paramstr(i+1),1,1) <> '/') and (i < paramcount) do
  839.                      begin
  840.                        i := i + 1;
  841.                        disk_name := disk_name + ' ' + paramstr(i)
  842.                      end
  843.                  end;
  844.             'O': printer := ord(Upcase(temp_str[3]));
  845.             'P': val(copy(temp_str,3,255),copies,j)
  846.           end
  847.         end;
  848.       i := i + 1
  849.     end;
  850.   if copies = 0 then
  851.     begin
  852.       gotoxy(1,24); clreol; write('Press any key to continue ...');
  853.       key := readkey
  854.     end;
  855.   Display_choices
  856. end;
  857.  
  858. procedure read_disk_info;
  859.  
  860.   function masked:boolean;
  861.   var i:integer;
  862.  
  863.     function expand(s:str_12):str_12;
  864.     var left,right:str_12;
  865.         i,j:integer;
  866.     begin
  867.       for i := 1 to length (s) do
  868.         s[i] := upcase(s[i]);
  869.       if pos('.',s) <> 0 then
  870.         begin
  871.           left := copy (s,1,pos('.',s)-1);
  872.           left := copy (left + '         ',1,8);
  873.           right := copy (s,pos('.',s)+1,255);
  874.           right := copy (right+'    ',1,3)
  875.         end
  876.       else
  877.         begin
  878.           left := copy(s,1,255);
  879.           left := copy(left+'        ',1,8);
  880.           right := '   '
  881.         end;
  882.       for i := 1 to 8 do
  883.         if left[i] = '*' then
  884.           for j := i to 8 do
  885.             left[j] := '?';
  886.       for i := 1 to 3 do
  887.         if right[i] = '*' then
  888.           for j := i to 3 do
  889.             right[j] := '?';
  890.       expand := left + '.' + right
  891.     end;
  892.  
  893.     function matched(s1,s2:str_12):boolean;
  894.     var i:integer;
  895.     begin
  896.       matched := false;
  897.       for i := 1 to length(s1) do
  898.         if not ((s1[i] = s2[i]) or (s2[i] = '?')) then
  899.           exit;
  900.       matched := true
  901.     end;
  902.  
  903.   begin
  904.     masked := true;
  905.     for i := 1 to count do
  906.       if matched(expand(s_rec.name),expand(filespec[i].name^)) then
  907.         exit;
  908.     masked := false;
  909.   end;
  910.  
  911.   procedure read_dir;
  912.  
  913.   var
  914.     mask       :string[13];
  915.     error      :boolean;
  916.  
  917.   begin
  918.     num_files := 0;
  919.     gotoxy(x+30,y+7); write('Reading');
  920.     FindFirst(chr(drive+65)+':\*.*',anyfile-volumeid,s_rec);
  921.     if DosError = 0 then
  922.       begin
  923.         num_files := num_files + 1;
  924.         if not masked then
  925.           begin
  926.             count := count + 1;
  927.             new(filespec[count].name);
  928.             filespec[count].name^ := s_rec.name
  929.           end
  930.       end;
  931.     while DosError = 0 do
  932.       begin
  933.         FindNext(s_rec);
  934.         if DosError = 0 then
  935.           begin
  936.             num_files := num_files + 1;
  937.             if not masked then
  938.               begin
  939.                 count := count + 1;
  940.                 new(filespec[count].name);
  941.                 filespec[count].name^ := s_rec.name
  942.               end
  943.           end
  944.       end;
  945.     for i := 1 to count do
  946.       filespec[i].name^ := copy(filespec[i].name^+'             ',1,12);
  947.     gotoxy(x+30,y+7);
  948.     write('Sorting');
  949.     again := true;
  950.     delay(500);
  951.     while again do
  952.       begin
  953.         again := false;
  954.         for i := start + 1 to count - 1 do
  955.           if filespec[i].name^ > filespec[i + 1].name^ then
  956.             begin
  957.               temp_fs := filespec[i].name;
  958.               filespec[i].name := filespec[i + 1].name;
  959.               filespec[i + 1].name := temp_fs;
  960.               temp_cmt := filespec[i].cmt;
  961.               filespec[i].cmt := filespec[i + 1].cmt;
  962.               filespec[i + 1].cmt := temp_cmt;
  963.               again := true
  964.             end
  965.       end
  966.   end;
  967.  
  968. begin
  969.   free := diskfree(drive+1);
  970.   while not ((free <> -1) or abort) do
  971.     begin
  972.       free := DiskFree(drive+1);
  973.       key := ' ';
  974.       gotoXY(1,24);
  975.       clreol;
  976.       write('Disk drive ',chr(drive + 65),': not ready ... Press <ESC> to abort',^G);
  977.       delay(2000);
  978.       if keypressed then key := readkey;
  979.       if key = #27 then abort := true;
  980.     end;
  981.   if abort then exit;
  982.   d_size := disksize(drive + 1);
  983.   used := d_size - free;
  984.   read_dir;
  985. end;
  986.  
  987. procedure edit_mask_file;
  988. var bottom:integer;
  989.     offset:integer;
  990.     current:integer;
  991. begin
  992.   offset  := 0;
  993.   bottom  := 0;
  994.   current := 1;
  995.   if exist(mask_fs) then
  996.     begin
  997.       assign(mask_file,mask_fs);
  998.       {$I-}
  999.       reset(mask_file);
  1000.       while not eof(mask_file) do
  1001.         begin
  1002.           readln(mask_file,line);
  1003.           bottom := bottom + 1;
  1004.           new(filespec[bottom].cmt);
  1005.           filespec[bottom].cmt^ := line;
  1006.           if bottom = 1 then
  1007.             temp_str := line
  1008.         end;
  1009.       close(mask_file);
  1010.       {$I+}
  1011.       if ioresult <> 0 then
  1012.         begin
  1013.           gotoxy(1,24); clreol;
  1014.           write('Unable to read ... ',mask_fs,'  Press any key to continue.');
  1015.           key := readkey
  1016.         end
  1017.     end;
  1018.   if bottom = 0 then
  1019.     begin
  1020.       bottom := 1;
  1021.       new(filespec[current].cmt);
  1022.       filespec[current].cmt^ := ''
  1023.     end;
  1024.  
  1025.   gotoxy(1,24); clreol;
  1026.   write('Press <ESC> to end editing mask file.');
  1027.  
  1028.   for i := 5 to 22 do begin gotoXY(1,i); clreol end;
  1029.  
  1030.   window(1,5,80,22);
  1031.  
  1032.   repeat
  1033.     clrscr;
  1034.     if current < 19 then
  1035.       offset := 0
  1036.     else
  1037.       offset := current - 18;
  1038.     for i := 1 to 18 do
  1039.       begin
  1040.         gotoxy(7,i); clreol;
  1041.         write(filespec[offset+i].cmt^);
  1042.       end;
  1043.     gotoxy(7,current+offset); clreol;
  1044.     edit(filespec[current].cmt^,65);
  1045.     if (filespec[current].cmt^ = '') and (bottom > 1) then
  1046.       begin
  1047.         temp_cmt := filespec[current].cmt;
  1048.         for i := current + 1 to bottom do
  1049.           filespec[i - 1].cmt := filespec[i].cmt;
  1050.         filespec[bottom].cmt := temp_cmt;
  1051.         filespec[bottom].cmt^ := '';
  1052.         bottom := bottom - 1
  1053.       end;
  1054.     case key of
  1055.       #72 : if current > 1 then
  1056.               current := current - 1;
  1057.       ^M  : begin
  1058.               if type_over then
  1059.                 current := current + 1
  1060.               else
  1061.                 begin
  1062.                   current := current + 1;
  1063.                   bottom := bottom + 1;
  1064.                   new(filespec[bottom].cmt);
  1065.                   filespec[bottom].cmt^ := '';
  1066.                   temp_cmt := filespec[bottom].cmt;
  1067.                   for i := bottom downto current + 1 do
  1068.                     filespec[i].cmt := filespec[i-1].cmt;
  1069.                   filespec[current].cmt := temp_cmt
  1070.                 end
  1071.             end;
  1072.       #80 : begin
  1073.               current := current + 1;
  1074.             end;
  1075.     end;
  1076.     if current > bottom then
  1077.       begin
  1078.         bottom := current;
  1079.         new(filespec[bottom].cmt);
  1080.         filespec[current].cmt^ := '';
  1081.       end;
  1082.   until key = #27;
  1083.  
  1084.   window(1,1,80,25);
  1085.  
  1086.   gotoxy(1,24); clreol;
  1087.   write('Press <ESC> to record changes ... any other aborts.');
  1088.   key := readkey;
  1089.   if key = #27 then
  1090.     begin
  1091.       {$I-}
  1092.       assign(mask_file,mask_fs);
  1093.       rewrite(mask_file);
  1094.       i := 1;
  1095.       disk_name := copy(filespec[i].cmt^,1,width[size]);
  1096.       while (i < bottom + 1) do
  1097.         begin
  1098.           writeln(mask_file,filespec[i].cmt^);
  1099.           i := i + 1;
  1100.         end;
  1101.       close(mask_file);
  1102.       {$I+}
  1103.       if ioresult <> 0 then
  1104.         begin
  1105.           gotoxy(1,24); clreol;
  1106.           write('Unable to create ... ',mask_fs,'  Press any key to continue.');
  1107.           key := readkey
  1108.         end
  1109.     end;
  1110.   clear_array;
  1111.   if mask_fs[1] = '.' then
  1112.     mask_fs := '';
  1113.   display_choices
  1114. end;
  1115.  
  1116. procedure read_mask_file;
  1117. begin
  1118.   start := 0;
  1119.   count := 0;
  1120.   if pos('.',mask_fs) = 0 then
  1121.     mask_fs := mask_fs + '.msk';
  1122.   if exist(mask_fs) then
  1123.     begin
  1124.       assign(mask_file,mask_fs);
  1125.       reset(mask_file);
  1126.       readln(mask_file,temp_str);
  1127.       disk_name := copy(temp_str,1,width[size]);
  1128.       while not eof(mask_file) do
  1129.         begin
  1130.           readln(mask_file,line);
  1131.           count := count + 1;
  1132.           if pos(':',line) <> 0 then
  1133.             begin
  1134.               new(filespec[count].name);
  1135.               new(filespec[count].cmt);
  1136.               start := count + 1;
  1137.               filespec[count].name^ := copy(line,1,pos(':',line)-1);
  1138.               filespec[count].name^ := copy(filespec[count].name^+'             ',1,12);
  1139.               filespec[count].cmt^  := copy(line,pos(':',line)+1,255);
  1140.               for i := 1 to length(filespec[count].name^) do
  1141.                 filespec[count].name^[i] := UpCase(filespec[count].name^[i])
  1142.             end
  1143.           else
  1144.             if line <> '' then
  1145.               begin
  1146.                 new(filespec[count].name);
  1147.                 filespec[count].name^ := line;
  1148.                 for i := 1 to length(filespec[count].name^) do
  1149.                 filespec[count].name^[i] := UpCase(filespec[count].name^[i]);
  1150.                 for i := 1 to length(filespec[count].name^) do
  1151.                   filespec[count].name^[i] := UpCase(filespec[count].name^[i])
  1152.               end
  1153.         end;
  1154.       close(mask_file)
  1155.     end;
  1156.   display_choices
  1157. end;
  1158.  
  1159. procedure print_label;
  1160.  
  1161. var cr,cf : integer;
  1162.  
  1163. begin
  1164.  
  1165.   if abort then exit;
  1166.   if blank then gotoxy(x+30,y) else gotoxy(x+30,y+7); write('Printing');
  1167.   while not (lpt_ready or abort) do
  1168.     begin
  1169.       key := ' ';
  1170.       gotoxy(1,24);
  1171.       clreol;
  1172.       write('Printer not ready ... Press <ESC> to abort',^G);
  1173.       delay(2000);
  1174.       if keypressed then key := readkey;
  1175.       if key = #27 then abort := true;
  1176.       if (copies > 0) and abort then halt
  1177.     end;
  1178.   if abort then exit;
  1179.  
  1180.   cf := 1;
  1181.  
  1182.   while not abort do
  1183.  
  1184.     begin
  1185.       write(lst,init_str,line_spacing);
  1186.       if wrap[size] then
  1187.         begin
  1188.           write(lst,#13,#10,#10,'       ');
  1189.           for i := width[size] downto 1 do    { need to print this backwards }
  1190.             if (i > length (disk_name)) then
  1191.               write(lst,flop(' '))
  1192.             else
  1193.               write(lst,flop(disk_name[i]));
  1194.           writeln(lst,#13,#10,#10,#10,'-                       -',#10,
  1195.                       sub_on,disk_name,sub_off,#10,#10)
  1196.         end;
  1197.  
  1198.       if dbl[size] then
  1199.         write(lst,dbl_on);
  1200.  
  1201.       writeln(lst,emp_on,dbl_st_on,disk_name,emp_off,dbl_st_off,dbl_off,sub_on,cond_on,#10);
  1202.  
  1203.       line := long;
  1204.       if not (library = '') then
  1205.         begin
  1206.           insert('Library of ',line,1);
  1207.           insert(' '+library,line,(((cols[size] * 12)+((cols[size] - 1) * filler[size]))-length(library)));
  1208.         end;
  1209.       line := copy(line,1,(cols[size] * 12)+((cols[size] - 1) * filler[size]));
  1210.       writeln(lst,line);
  1211.  
  1212.       cr := 0;
  1213.  
  1214.       repeat
  1215.         if cf < start then
  1216.           begin
  1217.             if filespec[cf].name^[1] <> ' ' then
  1218.               writeln(lst,filespec[cf].name^,' ',filespec[cf].cmt^)
  1219.             else
  1220.               writeln(lst,filespec[cf].cmt^);
  1221.             cf := cf + 1;
  1222.             if cf = start then
  1223.               cf := cf + 1;
  1224.             cr := cr + 1
  1225.           end
  1226.         else
  1227.           begin
  1228.             for i := 0 to rows[size] - cr - 1 do
  1229.               begin
  1230.                 for k := 0 to cols[size] - 1 do
  1231.                   write(lst,filespec[cf+k*(rows[size]-cr)+i].name^,'':filler[size]);
  1232.                 writeln(lst)
  1233.               end;
  1234.             cf := cf+k*(rows[size]-cr)+i+1;
  1235.             cr := rows[size]
  1236.           end
  1237.       until cr = rows[size];
  1238.  
  1239.       line := copy(long,1,(cols[size] * 12)+((cols[size] - 1) * filler[size]));
  1240.       writeln(lst,line);
  1241.       if blank then
  1242.         writeln(lst,date,'':(-38+cols[size]*12+(cols[size]-1)*filler[size]),'Self Loading .... Non DOS disk')
  1243.       else
  1244.         if ((cols[size] * 12) + ((cols[size] - 1) * filler[size])) < 31 then
  1245.           writeln(lst,date,'':(-20+cols[size]*12+(cols[size]-1)*filler[size]),
  1246.                       free:7,' FREE')
  1247.         else
  1248.           if ((cols[size] * 12) + ((cols[size] - 1) * filler[size])) < 44 then
  1249.             writeln(lst,date,'':(-31+cols[size]*12+(cols[size]-1)*filler[size]),
  1250.                         num_files:4,' FILES ',free:7,' FREE')
  1251.           else
  1252.             writeln(lst,date,'':(-44+cols[size]*12+(cols[size]-1)*filler[size]),
  1253.                         num_files:4,' FILES ',used:7,' USED ',free:7,' FREE');
  1254.       for k := 1 to feeds[size] do
  1255.         writeln(lst);
  1256.       write(lst,init_str);
  1257.       if (not cont) or (cf > count) or blank then
  1258.         abort := true
  1259.     end;
  1260.  
  1261. end;
  1262.  
  1263.  
  1264. procedure registration;
  1265. begin
  1266.   writeln(lst);
  1267.   writeln(lst,'                                                                   ┌─────┐');
  1268.   writeln(lst,'__________________________                                         │Place│');
  1269.   writeln(lst,'                                                                   │Stamp│');
  1270.   writeln(lst,'__________________________                                         │Here │');
  1271.   writeln(lst,'                                                                   └─────┘');
  1272.   writeln(lst,'__________________________');
  1273.   writeln(lst,'');
  1274.   writeln(lst,'__________________________');
  1275.   writeln(lst,'');
  1276.   writeln(lst,'(______) _____ - _________');
  1277.   writeln(lst,'');
  1278.   writeln(lst,'');
  1279.   writeln(lst,'                                         Guardian Soƒtware');
  1280.   writeln(lst,'                                         PO BOX 39');
  1281.   writeln(lst,'                                         ST. CLAIR SHORES, MI');
  1282.   writeln(lst,'                                                              48080-0039');
  1283.   writeln(lst,'');
  1284.   writeln(lst,'');
  1285.   writeln(lst,'Labeler ',version);
  1286.   writeln(lst,'');
  1287.   writeln(lst,'_______________________________________________________________________________');
  1288.   writeln(lst,'');
  1289.   writeln(lst,'');
  1290.   writeln(lst,'');
  1291.   writeln(lst,'                 For easy VISA / Master Card Registration');
  1292.   writeln(lst,'');
  1293.   writeln(lst,'');
  1294.   writeln(lst,'');
  1295.   writeln(lst,'');
  1296.   writeln(lst,'');
  1297.   writeln(lst,' Work Phone (____) ____ - ________           Home Phone (____) ____ - ________');
  1298.   writeln(lst,'');
  1299.   writeln(lst,'');
  1300.   writeln(lst,' CARD # ______________________________________________  Expires ______________');
  1301.   writeln(lst,'');
  1302.   writeln(lst,'');
  1303.   writeln(lst,' Name of Card Holder  ________________________________________________________');
  1304.   writeln(lst,'');
  1305.   writeln(lst,'');
  1306.   writeln(lst,' Signature  __________________________________________________________________');
  1307.   writeln(lst,'');
  1308.   writeln(lst,'                 (use reverse for suggestions/comments/problems)');
  1309.   writeln(lst,'_______________________________________________________________________________');
  1310.   writeln(lst,'');
  1311.   writeln(lst,'                            Labeler Registration Form');
  1312.   writeln(lst,'S');
  1313.   writeln(lst,'T');
  1314.   writeln(lst,'A          Remit to: Guardian Soƒtware');
  1315.   writeln(lst,'P');
  1316.   writeln(lst,'L');
  1317.   writeln(lst,'E');
  1318.   writeln(lst,'           ____  Labeler Registration for current copy      $10.00   ______');
  1319.   writeln(lst,'C');
  1320.   writeln(lst,'H          ____  Labeler Registration and latest version    $15.00   ______');
  1321.   writeln(lst,'E');
  1322.   writeln(lst,'C                            3 1/2" disk vice 5 1/4" add    $ 5.00   ______');
  1323.   writeln(lst,'K');
  1324.   writeln(lst,'                                                   Total             ______');
  1325.   writeln(lst,'H');
  1326.   writeln(lst,'E          Fold the page letter style at the lines, exposing the mailing');
  1327.   writeln(lst,'R          address and hiding your information.  Staple your check inside,');
  1328.   writeln(lst,'E          then staple or tape the sides and top.');
  1329.   writeln(lst,'');
  1330.   writeln(lst,'-')
  1331. end;
  1332.  
  1333. begin
  1334.   init_welcome;
  1335.   repeat
  1336.     abort := false;
  1337.     blank := false;
  1338.     if copies <> 0 then
  1339.       begin
  1340.         clear_array;
  1341.         read_mask_file;
  1342.         read_disk_info;
  1343.         repeat
  1344.           abort := false;
  1345.           print_label;
  1346.           gotoxy(x+30,y+7);
  1347.           clreol;
  1348.           copies := copies - 1
  1349.         until copies = 0;
  1350.         clrscr; exit
  1351.       end;
  1352.     gotoxy(1,24); clreol; write('Please enter your selection ?',^H);
  1353.     key := readkey;
  1354.     write(upcase(key));
  1355.     case key of
  1356.       'q','Q': begin
  1357.                  clrscr;
  1358.                  exit
  1359.                end;
  1360.       'p','P': begin
  1361.                  clear_array;
  1362.                  read_mask_file;
  1363.                  read_disk_info;
  1364.                  print_label;
  1365.                  gotoxy(x+30,y+7); clreol;
  1366.                end;
  1367.       's','S': begin
  1368.                  size := (size + 1) mod sizes;
  1369.                  SetSize
  1370.                end;
  1371.       'm','M': begin
  1372.                  gotoxy(x+30,y+4); clreol;
  1373.                  edit(mask_fs,25);
  1374.                  if pos('.',mask_fs) = 0 then
  1375.                    mask_fs := mask_fs + '.msk';
  1376.                  if not (mask_fs[1] = '.') then
  1377.                    edit_mask_file
  1378.                  else
  1379.                    mask_fs := '';
  1380.                  display_choices
  1381.                end;
  1382.       'n','N': begin
  1383.                  gotoxy(x+30,y+5); clreol;
  1384.                  edit(disk_name,width[size])
  1385.                end;
  1386.       'o','O': begin
  1387.                  printer := printer mod 3 + 1;
  1388.                  SetPrinter
  1389.                end;
  1390.       'l','L': begin
  1391.                  gotoxy(x+30,y+3); clreol;
  1392.                  edit(library,22)
  1393.                end;
  1394.       'd','D': begin
  1395.                  drive := (drive + 1) mod max_drive;
  1396.                  gotoxy(x+30,y+2);
  1397.                  write(chr(drive + 65),':')
  1398.                end;
  1399.       'c','C': begin
  1400.                  cont := not cont;
  1401.                  gotoxy(x+30,y+1);
  1402.                  if cont then write('Yes') else write('No ')
  1403.                end;
  1404.       'b','B': begin
  1405.                  blank := true;
  1406.                  clear_array;
  1407.                  read_mask_file;
  1408.                  print_label;
  1409.                  gotoxy(x+30,y); clreol;
  1410.                end;
  1411.       'r','R': begin
  1412.                  abort := false;
  1413.                  gotoxy(x+30,y+8);
  1414.                  write('Printing');
  1415.                  while not (lpt_ready or abort) do
  1416.                    begin
  1417.                      key := ' ';
  1418.                      gotoxy(1,24);
  1419.                      clreol;
  1420.                      write('Printer not ready ... Press <ESC> to abort',^G);
  1421.                      delay(2000);
  1422.                      if keypressed then key := readkey;
  1423.                      if key = #27 then abort := true;
  1424.                    end;
  1425.                  if not abort then registration;
  1426.                  gotoxy(x+30,y+8);
  1427.                  clreol
  1428.                end;
  1429.       'w','W': begin
  1430.                  gotoxy(x+30,y+10);
  1431.                  write('Writing');
  1432.                  assign(cnf_file,path + 'cfg');
  1433.                  {$I-}
  1434.                  rewrite(cnf_file);
  1435.                  writeln(cnf_file,cont);
  1436.                  writeln(cnf_file,drive);
  1437.                  writeln(cnf_file,library);
  1438.                  writeln(cnf_file,printer);
  1439.                  writeln(cnf_file,size);
  1440.                  close(cnf_file);
  1441.                  gotoxy(x+30,y+10);
  1442.                  write('       ');
  1443.                  {$I+}
  1444.                  if 0 <> IOResult then
  1445.                    begin
  1446.                      gotoxy(1,24);
  1447.                      clreol;
  1448.                      write('Problem writing '+
  1449.                             copy(paramstr(0),1,pos('.',paramstr(0)))+'cfg'+
  1450.                             ' ... Press any key to continue.');
  1451.                      while not keypressed do;
  1452.                      key := readkey
  1453.                    end
  1454.                end
  1455.     end;  {case}
  1456.   until false
  1457. end.
  1458.